import { SuperEntity } from '../common/types'
import { ResourceInfo, TaskType } from '../task-manage/types'
type TaskState =
  | 'SUBMITTED_SUCCESS'
  | 'RUNNING_EXECUTION'
  | 'READY_PAUSE'
  | 'PAUSE'
  | 'READY_STOP'
  | 'STOP'
  | 'FAILURE'
  | 'SUCCESS'
  | 'NEED_FAULT_TOLERANCE'
  | 'KILL'
  | 'WAITING_THREAD'
  | 'WAITING_DEPEND'
  | 'DELAY_EXECUTION'
  | 'FORCED_SUCCESS'
  | 'SERIAL_WAIT'
  | 'DISPATCH'
  // | 'READY_BLOCK'
  // | 'BLOCK'
  | 'PENDING'
type Flag = 'YES' | 'NO'
type Priority = 'HIGHEST' | 'HIGH' | 'MEDIUM' | 'LOW' | 'LOWEST'
type Direct = 'IN' | 'OUT'
type DataType =
  | 'VARCHAR'
  | 'INTEGER'
  | 'LONG'
  | 'FLOAT'
  | 'DOUBLE'
  | 'DATE'
  | 'TIME'
  | 'TIMESTAMP'
  | 'BOOLEAN'
  | 'LIST'
type TimeoutFlag = 'CLOSE' | 'OPEN'
type TaskTimeoutStrategy = 'WARN' | 'FAILED' | 'WARNFAILED'
interface Property {
  prop: string | null
  direct: Direct
  type: DataType
  value: string | null
}
interface TaskTimeoutParameter {
  flag: TimeoutFlag
  strategy: TaskTimeoutStrategy
  interval: number
}
interface TaskInstance extends SuperEntity {
  // 作业实例名
  name: string
  // 作业类型
  taskType: TaskType
  // 作业流id
  processInstanceId: number
  // 作业发布id
  taskDefinitionId: number
  // 作业定义id
  taskDefinedId: number
  // 作业版本
  taskDefinitionVersion: number
  // 作业流实例名
  processInstanceName: string
  // 实例状态
  state: TaskState
  // 首次提交时间
  firstSubmitTime: number | string
  // 提交时间
  submitTime: number | string
  // 开始时间
  startTime: number | string
  // 结束时间
  endTime: number | string
  // 执行节点主机
  host: string
  // 执行路径
  executePath: string
  // 日志路径
  logPath: string
  // 重试次数
  retryTimes: number
  // 告警开关
  alertFlag: Flag
  // 进程id
  pid: number
  // yarn application id
  appLink: string
  // 禁用标志
  flag: Flag
  // 执行时长
  duration: string
  // 最大重试次数
  maxRetryTimes: number
  // 重试间隔
  retryInterval: number
  // 作业优先级
  taskInstancePriority: Priority
  // 作业流优先级
  processInstancePriority: Priority
  // 依赖结果
  dependentResult: string
  // 执行节点组id
  workerGroupId: number
  // 执行环境配置id
  environmentId: number
  userId: number
  username: string
  proId: number
  proName: string
  // 本地参数
  localParams: Property[]
  // 全局参数
  globalParams: Property[]
  // 变量池
  varPool: Property[]
  // 依赖资源id集合
  resourceIds: number[]
  // 依赖资源集合
  resources: ResourceInfo[]
  // 延迟执行时间
  delayTime: number
  // 超时参数
  timeoutParam: TaskTimeoutParameter
  // 空跑标志
  dryRun: number
  isTmp: boolean
  // 作业组id
  taskGroupId: number
  // 作业组优先级
  taskGroupPriority: Priority
  // sql语句数量
  sqlCount: number
}

export { TaskState, TaskInstance, Property, Direct, DataType }
